阅读更多

编者按:很多人都想学编程。但是苦于没有具体的步骤和指导。比如想找份前端开发的工作,却不知道应该先学习什么再学习什么,也不知道该选择什么样的工具。因为经常被人问到类似的问题,全栈开发者Kamran Ahmed索性在github上制订了一份现代前端开发的路线图,并且用一篇文章对前端开发的整个学习过程进行了详细解释。感兴趣的初学者不容错过。

进入正题之前先交代一下我和这张路线图的背景。过去5年我一直在进行全栈开发,目前是tajawal的首席工程师(我得有很多头衔)。关注趋势并且让其他开发者训练得当不仅是我的爱好也是我的工作职责。在如何跟上形势方面我发现有很多新手(也包括一些有经验的)都感到很困惑。2017年的时候我有很多朋友都发邮件给我寻求指导,他们想知道做这一行的话应该学些什么。所以为了避免自己老是要碰到这样的麻烦同时也是为了帮助别人,我决定一劳永逸准备这些图表,这样只要有人问我时就把这些图表的链接发给他们。所以这些图表就是这么诞生的。

一开始他们只是想要一些工具的推荐,但是昨天我决定给他们一份更加结构化一点的东西,增加了细节并且设计成步骤的形式以便你可以更好地理解该选择什么,按照什么样的次序。

同时我还在制作后端和DevOps部分的路线图,但是前端已经做好了,你可以看看下面。

在详细介绍这份路线图的不同部分之前,我先花点时间讲讲我的免责声明:

这份路线图的目的是让你了解一下整体情况并且提供指导,如果你对接下来该学什么感到困惑的话。但并不鼓励你用赶时髦的心态去学东西。你应该对为什么一项工具在一些情况下更适合有基本了解,并且要记住时髦的东西从来都不意味着就是最适合你要处理的工作的。

好了,下面开始吧——下面就是这份路线图,但是本文的目的是依次解释路线图的每一个步骤。

你首先想要去做的第一件事是学习一些基础,包括学习HTML、CSS的一点基础知识,以及熟悉一下JavaScript的语法。

学习HTML基础

HTML给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些东西上:

  • 学习HTML基础,了解如何编写语义HTML

  • 理解如何把网页分成section(段落),以及如何正确组织DOM(文档对象模型)

任务——一旦你学习了HTML基础,至少要制作5个HTML网页。我建议你随便找一个网站,比如看看Github的档案页或者Twitter的登录页。然后把焦点放在恰当地组织内容上。出来的东西可能会很难看,但是暂时别担心,把你的关注点放在恰当的结构上。

学点CSS

现在我们已经学会了如何给网页准备好骨架,接下来就是在此基础上添加一些皮肤让它好看一点了。CSS——级联样式表就是用来美化你的HTML页面的。

  • 首先要做的是学习语法,熟悉常见的CSS属性。

  • 了解盒模型(box model),掌握如何利用Grid和Flexbox准备布局

  • 一旦学习完上面的,再学习以下通过媒体查询把网站做成响应式的。

任务——一旦你掌握了基础,接下来就应该设计上一步制作的HTML网页。比方说如果你给Github档案编写了HTML页面的话,现在是时候应用CSS来让它的样子看起来像实际的Github资料页面一样了。前面的那5个页面都要拿来试一下。

学习JavaScript基础

JavaScript能让你的HTML页面互动性更强。比方说你在网站上看过的所有那些幻灯片、弹出窗口以及广播通知,以及在没有重载页面的情况下重载页面的特定部分,这些都是用JavaScript做的。在这一步中,你将会学习JavaScript的基础来为后面的旅程做好准备——

  • 学习这门语言的语法和基本机构。

  • 学习如何用JavaScript来操纵DOM,比方说如何从页面移除一些元素,如何增加一些元素,增加和移除类,通过JavaScript应用CSS样式等。

  • 完成之后再学习和理解诸如范围、闭包、变量提升以及事件冒泡这样的主题。

  • 学习如何用XHR或者Ajax生成HTTP调用。Ajax可以让你在不需要重载网页的情况下执行特定动作。

  • 学完之后接下来就要了解ES6+的所有新特性。ES6只是JavaScript的一个版本,里面给这门语言引入了大量有趣的更新,比如类、定义变量的多种方式,给数组增加了新的方法,字符串连接等。你们在网上找到的大部分文章都会用Babel来解析ES6,这其实是个转译器,可以将这门新的JavaScript转换为旧的JavaScript,因为有一些旧版的浏览器不支持新版的JS。不过现在先不用担心Babel,只需要了解相关概念,然后用到任何一种支持ES6的最新版浏览器上来练习一下就行。我们后面还会再继续讲ES6的。

现在你应该已经感觉到东西像是那么一回事了。如果你按照上面的步骤做下来的话应该鼓励一下。这些是你刚刚学到的一些最重要的东西。

我应该学jQuery吗?

曾经有一段时间每个人都对jQuery疯狂,也有充分的理由;这是一个强大的库,在JavaScript基础上提供了一个封装,让你可以用兼容浏览器的方式执行任何东西。不过那些日子已经一去不复返,现在新项目用它已经不是很多了,但是仍然还有人在用。你不是一定要学它,但是这玩意儿的确很容易,如果你想看看的话还是有好处的。

练习时间

我已经说过很多次但是还是要再说一次,不练习的话你学不到任何东西。你可能随时都会感觉自己已经理解了但是如果不练习的话很快就会忘掉。在按照这份路线图去学习的时候,要确保尽可能多地去上手实践。

继续做些响应式网站,用JavaScript增加交互性。你可以添加任何感兴趣的现有的网页上去,但记住要利用上目前学到的一切

一旦你制作出了一些网站,接下来就是开始做真正的东西了。你可以到github上面找一些项目打开某些开源项目的pull请求。以下就是一些可以去尝试的pull请求:

  • 增强UI,把任何演示页做成响应式或者改进设计

  • 看看有什么开放的issue是你能够解决的

  • 重构任何你认为自己可以改进的代码

就像这个repo一样,告诉他们你正在学习让他们就你的PR以及可以如何加以改进提供反馈。

尽管我愿意推荐这个Github库,但是这需要了解一点git的知识,所以这是可选的。你不必做这个但如果你做了的话,你会发现真的很有用——只要你开口你会惊讶地发现居然有那么多人愿意帮助你。那你也可以找到很多有关git的免费资源,比如试试这个

鼓励自己一下

现在你已经学习了必要的基础了。如果一切都学得不错的话,你就可以去找份自由职业工作或者也许可以去试试能不能找份全职了。然而,如果你想有一份更好的职业的话,现在还不能停止脚步,因为还有很长一段路要走。

包管理器

在此之前,如果你要用到一些外部库比如插件或者任何外部的桌面小部件的话,你得手工下载JavaScript和CSS文件并且将它们放到项目里面,然后那些库或者插件发布新版本的时候,你又得下载更新的文件再放到你的项目里面,这是极其麻烦的事情。包管理器可以干掉这种麻烦。它们帮助你把外部库和插件放到你的项目里面,这样你就不用关心手工复制库或者费事地在它们发布新版时更新文件的事情了。现在有yarn和npm了。这两个几乎是一样的,都只是实现,你可以任选一个,一旦学会了使用其中一个,另一个自然也不成问题。

现在学以致用吧

在对包管理器有了基本了解之后,你就可以去安装一些外部库到你前面制作的一些网页上了,比如安装一些提示插件,当用户点击某个按钮时显示提示信息,或者创建一个登录表单用一些表单验证库进行表单验证,或者试试不同的选项看看如何安装不同的版本。

记得要看看语义版本控制

CSS预处理器

预处理器以CSS默认不支持的功能丰富了后者。可选项有很多,包括Sass、Less、Stylus等等。要我选的话,我会选择Sass。然而,PostCSS最近的发展势头也不错,这属于一个锦上添花的东西,有点类似于CSS的“Babel”。你可以拿来独立使用或者在Sass的基础上叠加。目前我建议你先学Sass,等后面有时间了再看看PostCSS。

CSS框架

你已经不再需要学习CSS框架了,然而如果你想学一个的话。我会推荐在Bootstrap、Materialize和Bulma里面选。但如果你要考虑它们的市场需求的话,我会选择Bootstrap。

CSS组织

随着你的应用不断膨胀,CSS也开始变得混乱难以维系。有多种手段可以对你的CSS进行组织,让它更好地应对伸缩性,比如OOCSS、SMACSS、SUITCSS、Atomic以及BEM。你应该了解它们之间的不同,但是我更偏好BEM。

构建工具

工具可以帮助你进行JavaScript应用的构建/打包以及开发。这一类包括了linter(代码检查)、task runner(自动构建)以及bundler(打包工具)。

对于自动构建,这个本来是是很多选项的,包括npm脚本、gulp、grun等等。不过这一次,既然webpack能够处理gulp能做的大部分东西,所以只有自动构建中的npm脚本可以用来对webpack能做的任务进行自动化。你不需要学习Gulp,然而到后面如果你有点时间的话,可以去看看它能否对你的应用有所帮助。

至于linter,再次地也有很多选项,其中包括ESLint、JSLint、JSHint以及JSCS等。但是目前主要是ESLint用得多。

对于模块打包工具,不同的选项包括Parcel、Webpack、Rollup、Browserify等。如果你必须选一个,目前你可以闭着眼睛选Webpack就是。Rollup也很常用但是主要建议用到库上面,至于app,还是以webpack为主。所以现在你就先学习一下webpack吧,后面如果想的话再了解一下Rollup。

练习时间——做点什么

恭喜你!你现在可以称自己为75%的现代JavaScript开发者了。现在继续用你学到的东西做点什么出来。也许可以做个库将来用到Sass和JavaScript上。然后用Webpack将Sass转换成CSS,用babel转换成ES6代码。一旦你做完了再把它发布到Github和npm上。

选一个框架

在旧的路线图中,这个部分往往是紧挨着基础部分的,但是这次我改到放在Sass、构建工具和包管理器后面了,因为在框架中你全都会用上那些东西,如果不具备相应知识的话会吓到你的。

框架也有好些选项。不过目前比较常用的是React、Vue和Angular。最近对React.js的需求越来越旺盛。然而,前面列的这几个你随便选一个都不会错。我个人会选React或者Angular。不过特别说明一下,作为初学者你也许会发现相对而言Angular会容易点,也许是因为它支持几乎一切立即可用的东西,比如支持延迟加载的强大路由器,支持拦截器的HTTP客户端,依赖注入,组件CSS封装等而不需要关心选择外部库的问题。不过React在社区方面无疑更有优势,而且Facebook一直都在努力改进它。你需要确保的是不要因为什么东西火就选择什么,要去google一下,对比一下,看看哪一个最适合你。

这两个的比较以及我的个人体会我要留到下一篇文章再谈了,不过既然这篇文章是谈学习的,我就来讲讲如何找到Angular和React的学习曲线。

下图中的学习曲线考虑了你已经具备TypeScript的知识,而且也懂了一些Rx.JS的基础。至于这种假设的原因我会在将来的文章中解释,不过主要是因为Angular提供的其中的一些即时可用的标准和关键功能。但这并不意味着React就是坏的,它们各自都有自己的地位,我以后会进一步细谈。

你可以看看各自的学习曲线,看看哪个更适合你。

一旦你选择了自己的框架,当然还有其他一些东西需要你学的。比方说如果你决定学React的话,你可能还得学Redux或者Mobx去了解状态管理,具体选学什么要取决于你要做的应用的规模。Mobx适合中小规模应用,Redux更适合大规模应用。甚至你可能都不需要学,靠React的原生状态管理就行了,如果你的app允许的话。

如果你选择Angular,你就得用TypeScript(没有它你也能开发出Angular应用,但是我们还是推荐你使用)和Rx.js,这些除了Angular应用以外在其他地方也能用得上。这都是非常强大的库,也适合于函数编程开发。

如果你选了Vue.js的话,也许还得学习Vuex,这东西有点类似于Redux但是是给Vue用的。

需要注意的是,Redux、Mobx以及Rx.js都不是跟这些框架绑死到一起的,你也可以用到各种JavaScript应用里面。此外,如果你选择了Angular的话,确保你用的是Angular 2+而不是Angular 1+。

练习时间

现在你已经知道了开发现代JavaScript应用所需的一切。现在就用你选择的框架做点东西出来吧。你会在库中的idea目录找到一些点子;任选一个然后开始吧!

做完之后,再去看看如何衡量和改进性能。比方说可以看看Interactivity Time、Page Speed Index以及Lighthouse Score等。

渐进式Web应用

一旦完成了上述所有步骤,再来学习一下service worker以及如何制作渐进式web应用。

测试你的应用

应用测试有很多工具,各自的用途也不一样。我本人经常是组合使用Jest、Mocha、 Karma及Enzyme。然而,在开始选择工具之前,最好是首先理解有哪些不同的测试类型,看看所有的选项情况,然后从中再选择最适合您需求的一个。

这里有一份很好的概括,你可以去看看。

静态类型检查器

静态类型检查器帮助给JavaScript增加类型检查。你不需要学习这些,不过这些东西可以赋予你超能力,而且学习起来也很快,几个钟头就行了。这方面主要有TypeScript 和 Flow。我喜欢TypeScript ,不过你可以两个都看看,再选你喜欢的。

服务器渲染

目前为止,你所学到的技能应该足够你找到一个“前端工程”的位置了。但且慢,你还可以更上一层楼。

你还可以在选定的任何框架内再学学服务器端渲染的知识。有不同的选项可选,这要取决于你用什么样的框架。比方说如果你决定用React,最值得关注的选项是Next.js 和 After.js。如果是Angular,你可以选Universal。对于Vue.js,我们有 Nuxt.js。

这份路线图可能还会有遗漏的地方,但是足以应付任何“前端工程”角色之所需。还要记住的是,关键是尽可能多地练习。一开始你可能会觉得很吓人,总感觉自己没有掌握,但这是正常的,慢慢你就会觉得自己变得越来越好。还有,陷入困境时别忘了寻求帮助,你会惊喜地发现有多少人愿意帮助你的,或者至少我愿意。

  • 大小: 487.3 KB
  • 大小: 834.4 KB
  • 大小: 43 KB
来自: 36氪
6
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 现代前端开发路线图:从零开始,一步步成为前端工程师 [转]

    因为经常被人问到类似的问题,全栈开发者Kamran Ahmed索性在github上制订了一份现代前端开发的路线图,并且用一篇文章对前端开发的整个学习过程进行了详细解释。感兴趣的初学者不容错过。进入正题之前先交代一下我和...

  • 前端开发线路图

    转自:现代前端开发路线图:从零开始,一步步成为前端工程师 1.学习HTML基础 HTML给你的网页赋予了结构。它就像是人的骨架那样让你保持站立。首先你需要去学习语法以及它必须提供的一切。你的学习应该聚焦在下面这些...

  • web前端如何才能成为架构师

    前端学习资料,包含了Vue、React、Electron、服务端渲染、微前端、前端性能优化、前端工程化、前端面试等方面的知识

  • 前端开发工程师几个月学习就可以月薪十几k吗?【全新web前端入门视频教程】

    IT行业作为一种新型产业在短短十几年俨然成为了我国重要的经济增长点,国家更是大力扶持,在众多IT学科中,首当其冲的就是前端,学习web前端的也是越来越来,不管是应届生还是转行从事的,web前端无疑是最快入门,...

  • HTML5大前端全套教程(视频+源码+学习路线图)

    在不知不觉中,前端工程师火了。...通过本视频的学习,你可以从零开始,一步步的掌握前端开发的各项相关技能,最终达到企业对初级前端开发工程师、中级前端开发工程师、高级开发工程师、全栈开发工程师等职

  • 基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

    基于matlab实现V2G系统simulink仿真图以及电动汽车充电和放电图.rar

  • 共创在线考试系统(JSP+SERVLET)130223.rar

    共创在线考试系统(JSP+SERVLET)130223.rar,这是一个针对计算机专业学生的JSP源码资料包,旨在帮助学生更好地理解和掌握Java Web开发技术。该资料包包含了一个基于JSP和Servlet技术的在线考试系统,具有以下特点:功能齐全:该系统包括了在线考试、成绩查询、试题管理、用户管理等多个模块,能够满足学生进行在线考试的需求。界面友好:系统采用了简洁明了的界面设计,使得用户能够快速上手,方便地进行操作。代码规范:源码遵循Java编程规范,结构清晰,注释详细,便于学生学习和理解。可扩展性强:系统采用了模块化的设计思路,可以根据需要进行功能的扩展和修改。数据库支持:系统使用了MySQL数据库进行数据存储,可以方便地进行数据的增删改查操作。通过学习这个JSP源码资料包,学生可以掌握JSP和Servlet的基本用法,了解Java Web开发的基本流程,提高自己的编程能力。同时,该系统还可以作为学生课程设计或者毕业设计的参考项目,帮助他们完成学业任务。总之,这个共创在线考试系统(JSP+SERVLET)130223.rar资料包对于计算机专业的学生来说,是一个非常有价值的学习资

  • 医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

    医药集团能源集团汽车集团大型集团战略规划顶层战略设计方案PPT(4份)

  • 基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

    基于matlab实现非常齐全的wsn定位matlaB仿真程序.rar

  • matlab GPS与捷联惯导的组合导航程序,可以运行.rar

    matlab GPS与捷联惯导的组合导航程序,可以运行.rar

  • 3D模型009,可用于建模、GIS、BIM、CIM学习

    3D模型009,可用于建模、GIS、BIM、CIM学习

  • 大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

    大一C++作业,功能完善的学生成绩管理系统 支持信息的增删改补,虚拟信息生成,排序,硬盘数据的写入与读取.zip

  • 毕业设计:基于SSM的mysql-软件缺陷管理系统(源码 + 数据库 + 说明文档)

    毕业设计:基于SSM的mysql_软件缺陷管理系统(源码 + 数据库 + 说明文档) 第2章 可行性分析 3 2.1技术的可行性 3 2.2经济的可行性 3 2.3操作可行性 4 2.4法律的可行性 4 第3章 需求分析 5 3.1开发工具需求 5 3.1.1开发语言和工具 5 3.1.2基于B/S结构开发 5 3.1.3 JAVA语言简介 5 3.1.4 JavaScript技术 6 3.1.5 MySQL数据库 6 3.1.7软硬件需求 6 3.2 系统需求 6 第4章 总体设计 8 4.1 系统模块总体设计 8 4.2 数据库设计 10 4.2.1 数据分析 10 4.2.2 数据库的详细设计 10 4.3 本章小结 12 第5章 详细设计与实现 13 5.1 管理员管理 13 5.1.1 管理员登录管理 13 5.1.2 欢迎页 13 5.1.3 项目经理管理 14 5.1.4 员工管理 15 5.1.5 用户登录日志管理 15 5.1.6 个人信息管理 16 5.2 项目经理管理 17 5.2.1 项目经理登录 17 5.2.2 项目管理 18 5.3 调试员端 1

  • 大型集团企业财务共享业财一体化应用平台建设方案.pptx

    大型集团企业财务共享业财一体化应用平台建设方案.pptx

  • 银行智能化数据安全分类分级实践方案.pdf

    银行智能化数据安全分类分级实践方案.pdf

  • node-v6.10.1.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 知乎小程序算法.zip

    知乎小程序算法.zip

  • 基于嵌入式AI的人脸识别课堂签到系统.zip

    优秀源码设计,详情请查看资源源码内容

  • 基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

    基于matlab实现文档+程序边缘计算任务卸载与资源调度的算法,是论文的源代码,具有价值.rar

Global site tag (gtag.js) - Google Analytics